package model

import (
	"crypto/sha256"
	"encoding/hex"
	"fmt"
	"time"
)

type User struct {
	ID           int        `gorm:"primaryKey;autoIncrement;column:id" json:"id"`             // 主键id
	Username     string     `gorm:"size:20;default:'';column:username" json:"username"`       // 用户名
	Password     string     `gorm:"size:20;default:'';column:password" json:"password"`       // 密码
	Nickname     string     `gorm:"size:20;default:'';column:nickname" json:"nickname"`       // 昵称
	Avatar       string     `gorm:"size:255;default:'';column:avatar" json:"avatar"`          // 头像照片
	Token        string     `gorm:"size:32;default:'';column:token" json:"token"`             // 登录令牌
	ExpirationAt int        `gorm:"default:0;column:expiration_at" json:"expiration_at"`      // 登录令牌过期时间
	LastAt       time.Time  `gorm:"column:last_at" json:"last_at"`                            // 最后登录时间
	OpenID       string     `gorm:"size:32;default:'';column:openid" json:"openid"`           // openid
	SessionKey   string     `gorm:"size:32;default:'';column:session_key" json:"session_key"` // session_key
	UnionID      string     `gorm:"size:32;default:'';column:unionid" json:"unionid"`         // unionid
	WxAvatar     string     `gorm:"size:255;default:'';column:wx_avatar" json:"wx_avatar"`    // 微信头像
	WxNickname   string     `gorm:"size:50;default:'';column:wx_nickname" json:"wx_nickname"` // 微信昵称
	Mobile       int        `gorm:"default:0;column:mobile" json:"mobile"`                    // 手机号码
	Lineup       int        `gorm:"default:0;column:lineup" json:"lineup"`                    // 阵容，1=>红，2=>蓝
	CreatedAt    time.Time  `gorm:"column:created_at" json:"created_at"`                      // 创建时间
	UpdatedAt    time.Time  `gorm:"column:updated_at" json:"updated_at"`                      // 修改时间
	DeletedAt    *time.Time `gorm:"column:deleted_at;index" json:"deleted_at"`                // 删除时间
}

// TableName 设置表名
func (User) TableName() string {
	return "game_user"
}

func GenerateToken(userId int, timestamp int) string {
	// 1. 将用户ID和时间戳拼接成字符串
	input := fmt.Sprintf("%d%d", userId, timestamp)

	// 2. 计算SHA-256哈希
	hash := sha256.New()
	hash.Write([]byte(input))
	hashBytes := hash.Sum(nil) // 获取哈希结果的字节切片

	// 3. 转换为十六进制字符串并截取前32位
	hexString := hex.EncodeToString(hashBytes)
	token := hexString[:32] // 取前32个字符

	return token
}
